package cn.com.cifi.mars.mapper.mars;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import cn.com.cifi.mars.bean.dto.SupplyMonthlyVersionDto;
import cn.com.cifi.mars.bean.dto.SupplyPlanVersionDto;
import cn.com.cifi.mars.bean.vo.supply.SupplyPlanVersionsVO;
import cn.com.cifi.mars.entity.PriceVersion;
import cn.com.cifi.mars.entity.SupplyPlanVersion;
import cn.com.cifi.mars.entity.common.ProjectByStages;

/**
 * <p>
 * 供货计划版本表 Mapper 接口
 * </p>
 *
 * @author yyd
 * @since 2019-09-09
 */
public interface SupplyPlanVersionMapper extends BaseMapper<SupplyPlanVersion> {
    /**
     * 
     * 方法描述：获取项目分期下最新的版本阶段
     * @param projectFid 分期ID
     * @param isDel 是否删除
     * @return String
     * 创建人：yyd
     * 创建时间：2019年10月23日 下午4:11:16
     */
    String selectNewestVersionStage(@Param("projectFId")String projectFid, @Param("isDel")int isDel);
    
    /**
	 * 方法描述：获取版本列表
	 * @param projectFId 分期Id
	 * @param versionType 版本类型
	 * @param isDel 是否删除
	 * @return List<SupplyPlanVersionsVO>
	 * 创建人：yyd
	 * 创建时间：2019年9月11日 上午10:34:53
	*/
	List<SupplyPlanVersionsVO> selectVersions(@Param("projectFId")String projectFId,  
											  @Param("versionType")String versionType, 
											  @Param("isDel")int isDel);
    
	/**
	 * 
	 * 方法描述：获取货值版本
	 * @param priceVersionId 货值版本Id
	 * @param isDel 是否删除
	 * @return PriceVersion
	 * 创建人：yyd
	 * 创建时间：2019年11月19日 上午10:39:31
	 */
	PriceVersion selectPriceVersion(@Param("priceVersionId")String priceVersionId, @Param("isDel") int isDel);
    
    /**
     * 
     * 方法描述：根据版本类型获取最新的版本信息
     * @param projectFId分期ID
     * @param versionType版本类型
     * @param versionState版本状态
     * @param isDel是否删除
     * @return SupplyPlanVersion
     * 创建人：yyd
     * 创建时间：2019年9月10日 下午4:54:18
     */
    SupplyPlanVersion selectNewestVersion(@Param("projectFId")String projectFId,@Param("versionType") String versionType,@Param("isDel") int isDel);
   
    SupplyPlanVersion selectNewestBudgetVersion(@Param("projectFId")String projectFId,@Param("versionType") String versionType,@Param("versionIdentify") String versionIdentify,@Param("isDel") int isDel);
    
	SupplyPlanVersion selectNewestVersionByProjectFid(@Param("projectFId")String projectFId,@Param("isDel") int isDel);
    
    /***
     * 
     * 方法描述：获取项目下各分期的最新版本信息
     * @param projectId 项目ID
     * @param stageName 分期名称（筛选使用）
     * @param isDel是否删除
     * @return List<SupplyPlanVersion>
     * 创建人：yyd
     * 创建时间：2019年10月23日 下午4:13:51
     */
	List<SupplyPlanVersion> selectNewestVersionByProjectId(@Param("projectId")String projectId,@Param("stageName")String stageName,@Param("isDel") int isDel);
	
	/**
	 * 
	 * 方法描述：获取版本阶段类型
	 * @param versionId 版本ID
	 * @param isDel是否删除
	 * @return String
	 * 创建人：yyd
	 * 创建时间：2019年10月23日 下午4:15:05
	 */
	String selectVersionType(@Param("versionId")String versionId,@Param("isDel") int isDel);
	/**
	 * 
	 * 方法描述：获取预算版版本来源ID
	 * @param id 货值版本ID
	 * @param isDel是否删除
	 * @return String
	 * 创建人：yyd
	 * 创建时间：2019年10月23日 下午4:15:05
	 */
	SupplyPlanVersion selectBudgetSourceSupplyId(@Param("versionId")String versionId, @Param("isDel") int isDel);
	
	List<SupplyPlanVersion> selectAssessmentVersion(@Param("versionId")String versionId, 
													@Param("projectFid")String projectFid, 
													@Param("isDel") int isDel, 
													@Param("isAssessmentVersion") int isAssessmentVersion);
	
	/**
	 * 
	 * 方法描述：删除已存在的考核版本标识
	 * @param projectFid 货值版本ID
	 * @param isAssessmentVersion
	 * @param isDel是否删除
	 * @return String
	 * 创建人：yyd
	 * 创建时间：2019年10月23日 下午4:15:05
	 */
	void deleteExistedAssessmentTag(@Param("projectFid")String projectFid, @Param("isAssessmentVersion")int isAssessmentVersion, @Param("isDel") int isDel);
	
	/**
	 * 
	 * 方法描述：设置考核版本标识
	 * @param versionId 供货版本ID
	 * @param isAssessmentVersion
	 * @param isDel是否删除
	 * @return String
	 * 创建人：yyd
	 * 创建时间：2019年10月23日 下午4:15:05
	 */
	void setInvestmentAssessmentTag(@Param("versionId")String versionId,@Param("projectFid")String projectFid, @Param("isAssessmentVersion")int isAssessmentVersion, @Param("isDel") int isDel);
	/**
	 * 
	 * 方法描述：设置考核版本标识
	 * @param versionId 货值版本ID
	 * @param isAssessmentVersion
	 * @param isDel是否删除
	 * @return String
	 * 创建人：yyd
	 * 创建时间：2019年10月23日 下午4:15:05
	 */
	void setAssessmentTag(@Param("versionId")String versionId,@Param("isAssessmentVersion")int isAssessmentVersion, @Param("isDel") int isDel);
	
	SupplyPlanVersion selectVersionByProjectFid(@Param("projectFid")String projectFid, @Param("priceVersionId")String priceVersionId, @Param("isDel") int isDel);
	
	SupplyPlanVersionDto selectVersionData(@Param("versionId")String versionId, @Param("isDel") int isDel);
	/**
	 * 
	 * 方法描述：获取当前月份需要供货确认的版本
	 * @param curTimeStr 时间
	 * 创建人：yyd
	 * 创建时间：2019年11月28日 上午10:35:07
	 */
	List<SupplyPlanVersion> selectNeedSupplyConfirmVersion(@Param("curTimeStr")String curTimeStr,@Param("isDel") int isDel);
	/**
	 * 
	 * 方法描述：条件筛选集团或事业部下 项目存在动态版的版本信息
	 * @param projectIds 项目IDs
	 * @param projectName 项目名称
	 * @param status 确认供货状态
	 * @param versionDate 版本日期
	 * 创建人：yyd
	 * 创建时间：2019年12月2日 下午3:15:50
	 */
	List<SupplyPlanVersionDto> selectDynamicVersionByOrgIdAndDate(@Param("projectIds")List<String> projectIds, @Param("projectName")String projectName, @Param("status")Integer status,
			@Param("versionDate")String versionDate,@Param("endConfirmDate")String endConfirmDate,@Param("isDel") int isDel);
	/**
	 * 
	 * 方法描述：查询需要封版的版本
	 * @param versionType 版本类型
	 * @param isDel
	 * 创建人：yyd
	 * 创建时间：2019年12月4日 下午2:46:49
	 */
	SupplyPlanVersion selectFinalizeVersion(@Param("priceId")String priceId, @Param("versionType")String versionType, @Param("isDel") int isDel);
	/**
	 * 
	 * 方法描述：定稿
	 * @param versionIds 版本ID
	 * @param isFinalize 是否定稿
	 * 创建人：yyd
	 * 创建时间：2019年12月4日 下午5:35:11
	 */
	void setFinalizeVersion(@Param("versionIds")List<String> versionIds, @Param("isFinalize")int isFinalize);
	
	/**
	 * 
	 * 方法描述：查询预算版
	 * @param budgetYear 归属年份
	 * @param versionAttr 版本属性，战规前-before_warplan，战规后-after_warplan
	 * @param versionIdentify 版本标识（预算版：mid_year--年中；all_year--全年）
	 * @param versionType 版本类型
	 * @param isDel 是否删除
	 * @return List<SupplyPlanVersion>
	 * 创建人：yyd
	 * 创建时间：2019年12月14日 下午5:14:21
	 */
	List<SupplyPlanVersion> selectBudgetVersionByFId(@Param("projectFId")String projectFId, 
												@Param("budgetYear")String budgetYear, 
												@Param("versionAttr")String versionAttr, 
												@Param("versionIdentify")String versionIdentify,
												@Param("versionType")String versionType, 
												@Param("isDel") int isDel);
	/**
	 * 
	 * 方法描述：修改供货确认状态
	 * @param versionId 版本ID
	 * @param confirmStatus 确认状态 
	 * 创建人：yyd
	 * 创建时间：2019年12月16日 上午10:50:27
	 */
	void batchUpdateConfirmStatus(@Param("versionIds")List<String> versionIds, @Param("confirmStatus") Integer confirmStatus);
	
	/**
	 * 
	 * 方法描述：获取项目归属月份最新动态版数据
	 * @param projectId 项目ID
	 * @param versionDate 归属月份
	 * @param isDel
	 * 创建人：yyd
	 * 创建时间：2019年12月16日 下午2:24:49
	 */
	List<SupplyPlanVersion> selectNewestDynamicVersion(@Param("projectId")String projectId, @Param("versionDate")String versionDate,@Param("isDel") int isDel);
	
	SupplyPlanVersion selectNewestDynamicVersionByProjectFId(@Param("projectFId")String projectFId, @Param("versionType")String versionType, @Param("versionDate")String versionDate,@Param("isDel") int isDel);
	/**
	 * 
	 * 方法描述 取消供货确认状态
	 * @param projectId 项目ID
	 * @param versionDate 归属月份
	 * @param keyConfirmStatus
	 * @param isDel
	 * 创建人：yyd
	 * 创建时间：2019年12月16日 下午2:45:50
	 */
	void deleteConfirmStatus(@Param("projectId")String projectId, @Param("versionDate") String versionDate,  @Param("ConfirmStatus")Integer ConfirmStatus, @Param("isDel")int isDel);

	List<SupplyPlanVersion> selectUnconfirmedVersions(@Param("date")String date,@Param("versionType") String versionType,@Param("isDel")int isDel);

	List<Map<String, Object>> selectProjectList(@Param("isDel")int isDel);
	
	List<Map<String, Object>> selectStageByProjectId(@Param("projectId")String projectId,@Param("isDel")int isDel);

	List<SupplyPlanVersion> selectNewestDynamicVersionByStageId(@Param("projectFId")String projectFId, @Param("versionDate")String versionDate,@Param("confirmStatus")int confirmStatus,@Param("isDel")int isDel);
	
	List<SupplyPlanVersion> selectComfirmVersion(@Param("priceVersionId")String priceVersionId,@Param("confirmStatus")Integer confirmStatus, @Param("isDel")int isDel);

	SupplyPlanVersion selectOneByVersionId(@Param("versionId")String versionId, @Param("isDel")int isDel);

	List<SupplyPlanVersion> selectFirstBudgetVersionListByProjectId(@Param("projectId")String projectId,@Param("year")String year,@Param("versionType")String versionType, @Param("isDel")int isDel);
	
	List<SupplyPlanVersion> selectMidBudgetVersionListByProjectId(@Param("projectId")String projectId,@Param("year")String year,@Param("versionType")String versionType, @Param("isDel")int isDel);

	List<SupplyPlanVersion> selectDynamicVersionListByProjectId(@Param("projectId")String projectId, @Param("versionType")String versionType,  @Param("month")String month, @Param("isDel")int isDel);
	
	SupplyPlanVersion selectNewestVersionByPriceId(@Param("priceVersionId")String priceVersionId, @Param("isDel")int isDel);

	List<SupplyMonthlyVersionDto> selectNewestVersionList(@Param("month")String month, @Param("isDel")int isDel);

	SupplyPlanVersion selectConfirmSupplyVersion(@Param("stageId")String stageId, @Param("affiliationMonth")String affiliationMonth, @Param("confirmStatus")Integer confirmStatus, @Param("isDel")int isDel);

	List<SupplyPlanVersion> selectFinalizeVersionList(@Param("month")String month);

	List<SupplyPlanVersion> selectConfirmVersionList(@Param("month")String month);

	List<ProjectByStages> selectProjectParentList();

	List<Map<String, Object>> selectTodoIds(@Param("projectList")List<String> projectList, @Param("todoType")String todoType, @Param("todoStatus")String todoStatus);

	List<Map<String, Object>> selectStageInfo(@Param("stageId")String stageId,@Param("createTime") String createTime);

	SupplyPlanVersion selectFinalize(@Param("month")String month, @Param("projectFid")String projectFid, @Param("isDel")int isDel);

	SupplyPlanVersion selectConfirm(@Param("month")String month, @Param("projectFid")String projectFid, @Param("isDel")int isDel);

	List<SupplyPlanVersionDto> selectConfirmVersion(@Param("projectId")String projectId,@Param("affiliationMonth")String affiliationMonth,@Param("endConfirmDate") String endConfirmDate, @Param("isDel")int isDel);
	
}
